#ifndef __KLIB_H_
#define __KLIB_H_

#ifdef _DEBUG
//debug defines
#endif

#ifdef _WIN32
	#define KLIBWINDOWS
#elif _WIN64
	#define KLIBWINDOWS
#elif __WIN32__
	#define KLIBWINDOWS
#elif __linux__
	#define KLIBLINUX
#elif linux
	#define KLIBLINUX
#endif

#ifdef KLIBWINDOWS
	#define WIN32_LEAN_AND_MEAN
	//#define WINVER 0x0501
	#ifndef _WIN32_WINNT
	#define _WIN32_WINNT 0x0501
	#endif
	#define _CRTDBG_MAPALLOC 

	#include "windows.h"
	#include <process.h> 
#endif

#endif

/*
Standard Includes
*/
#include <stdlib.h>
#include <crtdbg.h>
#include <tchar.h>
#include <hash_set>
#include <hash_map>
#include <vector>
#include <queue>
#include <map>
#include <list>
#include <iostream>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <sstream>
#include <cmath>
#include <ctime>

/*
Useful Macros
*/
#define SK namespace KLib{
#define EK }
#define SAFE_RELEASE(o) { if (o) { o->Release (); (o) = NULL; } }
#define SAFE_DELETE(o) { if (o) { delete o; o=NULL; } }
#define SAFE_DELETE_ARRAY(o) { if (o) { delete [] o; o=NULL; } }

#ifdef _WIN32
	#pragma warning( disable: 4251 )
	#ifdef EXPORTCLASSES
		#define EXPORTEDCLASS 
	#else
		#define EXPORTEDCLASS 
	#endif

#endif

#include "KLibTypes.h"